package _03_recursion;

import org.junit.Test;

/**
 * @author: mornd
 * @dateTime: 2023/6/1 - 18:07
 * 将求和函数改为尾递归
 *
 * Java 编译器不会优化尾递归
 * scala/C++ 编译器会优化尾递归，可以避免爆栈问题
 */
public class TailDemo {
    @Test
    public void test() {
        System.out.println(sum(10, 0));
//        System.out.println(sum2(10));
    }

    // 属于尾递归
    int sum(int n, int accu) {
        if (n == 1) {
            return 1 + accu;
        }
        return sum(n - 1, n + accu);
    }

    // 不属于尾递归
    int sum2(int n) {
        if (n == 1) {
            return 1;
        }
        return n + sum2(n - 1);
    }
}
